package kuonjisai;

public class J22_privateConstructor {
	
	// private 으로 선언된 생성자
	// 일반적으로 모든 생성자는 public 이어야 함
	// 클래스에 대한 객체를 생성하려면 
	// 반드시 필요한 것이 생성자이기 때문임
	
	// 하지만, 어떤 생성자는 private 으로 만들어서
	// new 연산자로 그들의 클래스가 객체화되지
	// 못하게 하는 경우도 있음
	// private 생성자를 사용한 클래스를
	// singleton 클래스라 부름
	
	// 생성자는 private으로 선언
	// 객체변수는 private  static 으로 선언해서
	// 클래스의 객체를 메서드를 통해 접근 가능
	
	public static void main(String[] args) {
		/*Singleton one = new Singleton();
		Singleton two = new Singleton();
		Singleton three = new Singleton()*/
		
		Singleton one = Singleton.newInstance();
		Singleton two = Singleton.newInstance();
		Singleton three  = Singleton.newInstance();
		
				
		
	} // main
	
} // class

 class Singleton {
	 private static Singleton object = null;
	 // object 는 static 으로 선언ㄷ괴었기 때문에
	 // 단 하나의 객체만 생성가능 흥흥
	 
	 
/*	
	 public Singleton() {
		 System.out.println( "객체가 하나 만드러져쪄염" );
		 
	} 일반 생성자 */

	 private Singleton() {
		 System.out.println( "객체가 하나 만드러져쪄염" );
		 
	}
	 
	/* public static Singleton newInstance() {
		 Singleton object = new Singleton();
		 return object;
	 }*/ // 생성자메서드는 일반메서드를 통해서만 호출 ~~~;;ㄴㄴ누누누누ㅜ누아아아악ㄱ가가가가각

	 public static Singleton newInstance() {
		 
		if(object == null) object = new Singleton();
		// 객체가 만들어지지 않았다면 (object == null)
		// 객체를 하나 생성함 ( new Singleton )
		return object;
	 }
	 
 } // Singleton